package com.jackeys.piaems.service.impl;

import com.jackeys.piaems.dao.ImageDao;
import com.jackeys.piaems.dto.ImageInfDto;
import com.jackeys.piaems.entity.Image;
import com.jackeys.piaems.service.ImageService;
import com.jackeys.piaems.util.EmailUtil;
import com.jackeys.piaems.util.FileUtil;
import com.jackeys.piaems.util.StatusEnumUtil;
import com.jackeys.piaems.vo.ResponseVo;
import com.sun.org.apache.xpath.internal.operations.Bool;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.mail.MessagingException;
import java.util.ArrayList;
import java.util.List;

/**
 * @ClassName: ImageServiceImpl
 * @Description: 图片业务册接口
 * @Author: Jackeys
 * @Date: 2021-06-28 16:23
 * @Version: 1.0
 */
@Slf4j
@Service
@Transactional
public class ImageServiceImpl implements ImageService {

    @Autowired
    private ImageDao imageDao;

    @Override
    public ResponseVo queryImageBySize(Integer page) {
        log.debug("=====================================================================");
        log.debug("获取入侵检测图片");
        int pageSize=12;
        int start=(page-1)*pageSize;
        int totalCnt=imageDao.selectCntImage();
        List<Image> imageList=imageDao.queryImageBySize(start,pageSize);
        if(imageList==null||imageList.size()==0){
            log.debug("获取失败");
            log.debug("=====================================================================");
            return new ResponseVo(StatusEnumUtil.IMAGE_GET_FAIL);
        }
        log.debug("获取成功");
        log.debug("=====================================================================");
        return new ResponseVo(StatusEnumUtil.IMAGE_GET_SUCCESS).add("imageList",imageList).add("totalCnt",totalCnt);
    }

    /**
    * @Name: insertImage
    * @Description: 插入图片
    * @Param: [url, date]
    * @return: java.lang.Boolean
    * @Author: Jackeys
    * @Date: 2021/6/28 17:17
    * @Version: 1.0
    */
    @Override
    public Boolean insertImage(String url, String date) {
        log.debug("=====================================================================");
        log.debug("开始存储路径");
        Boolean flag=imageDao.insertImage(url,date);
        if(flag){
            log.debug("存储成功");
        }else{
            log.debug("存储失败");
        }
        log.debug("=====================================================================");
        return flag;
    }

    /**
    * @Name: sendEmailAlert
    * @Description: 发送入侵邮件提醒
    * @Param: [email]
    * @return: com.jackeys.piaems.vo.ResponseVo
    * @Author: Jackeys
    * @Date: 2021/6/30 21:37
    * @Version: 1.0
    */
    @Override
    public ResponseVo sendEmailAlert(String email) {
        log.debug("=====================================================================");
        log.debug("开始发送入侵邮件提醒");
        try {
            EmailUtil.sendEmail(email,"检测到入侵，请查看");
            log.debug("入侵检测邮件发送成功");
            log.debug("=====================================================================");
            return new ResponseVo(StatusEnumUtil.SECURITY_CODE_SEND_SUCCESS);
        } catch (MessagingException e) {
            e.printStackTrace();
            log.debug("入侵检测邮件发送失败");
            log.debug("=====================================================================");
            return new ResponseVo(StatusEnumUtil.SECURITY_CODE_SEND_FAIL);
        }
    }

    /**
    * @Name: queryImageCntByDate
    * @Description: 按照日期分类，图表显示一天检测到多少的图片
    * @Param: []
    * @return: com.jackeys.piaems.vo.ResponseVo
    * @Author: Jackeys
    * @Date: 2021/6/30 21:43
    * @Version: 1.0
    */
    @Override
    public ResponseVo queryImageCntByDate() {
        log.debug("=====================================================================");
        log.debug("获取图片数量");
        List<ImageInfDto> imageInfDtoList=new ArrayList<>();
        imageInfDtoList =imageDao.selectCntAndDate();
        if(imageInfDtoList==null||imageInfDtoList.size()==0){
            log.debug("获取失败");
            log.debug("=====================================================================");
            return new ResponseVo(StatusEnumUtil.IMAGE_GET_CNT_FAIL);
        }
        log.debug("获取成功");
        log.debug("=====================================================================");
        return new ResponseVo(StatusEnumUtil.IMAGE_GET_CNT_SUCCESS).add("imageInfList",imageInfDtoList);
    }

    @Override
    public ResponseVo queryImageBySizeAndCondition(Integer page, String condition) {
        log.debug("=====================================================================");
        log.debug("分页查询条件图片");
        int pageSize=12;
        int start=(page-1)*pageSize;
        List<Image> imageList=imageDao.queryImageBySizeAndCondition(start,pageSize,condition);
        if(imageList==null||imageList.size()==0){
            log.debug("分页查询条件图片失败");
            log.debug("=====================================================================");
            return new ResponseVo(StatusEnumUtil.IMAGE_GET_PAGE_QUERY_FAIL);
        }
        int cnt=imageDao.selectCntImageByCondition(condition);
        log.debug("分页查询条件图片成功");
        log.debug("=====================================================================");
        return new ResponseVo(StatusEnumUtil.IMAGE_GET_PAGE_QUERY_SUCCESS).add("imageList",imageList).add("totalCnt",cnt);
    }
}
